var buildTree = function (inorder, postorder) {
    if (!inorder.length) return null;
    const rootVal = postorder.pop(); // 从后序遍历的数组中获取中间节点的值， 即数组最后一个值
    let rootIndex = inorder.indexOf(rootVal); // 获取中间节点在中序遍历中的下标
    const root = new TreeNode(rootVal); // 创建中间节点
    root.left = buildTree(inorder.slice(0, rootIndex), postorder.slice(0, rootIndex)); // 创建左节点
    root.right = buildTree(inorder.slice(rootIndex + 1), postorder.slice(rootIndex)); // 创建右节点
    return root;
};
/*

                1
    2                       3
4       5               6

中序: 4 2 5 1 6 3
后续: 4 5 2 6 3 1
基于左闭右开
第一步拿到 后续最后面的数值 1
下标是 idx 
那么中序.slice(0,idx)  是整个树的左边
那么中序.slice(idx+1)  是整个树的右边

不需要idx加一是因为, 后序一开始的时候就pop()了, 并形成了TreeNode
后序同理, 后序.slice(0,idx) 左边
后序同理, 后序.slice(idx) 右边


第一步终止条件,   传过来的[].length为0 说明这个节点下面没有
第二步, 每一步动作 找到中间的那个节点,  然后把自身的左右节点递归下去
第三步 返回值 只需要返回自身的那个节点就好了.
*/